package com.vehicle.mapper;

import com.vehicle.domains.bo.QueryTransportVehicleBo;
import com.vehicle.domains.entity.TransportVehicleEntity;

import java.util.List;
import java.util.Map;

/**
 * 运输车辆信息Mapper接口
 * 处理运输车辆的新增、查询、更新、删除及状态管理操作
 */
public interface TransportVehicleMapper {

    /**
     * 新增运输车辆
     * @param transportVehicleEntity 运输车辆实体（包含车牌号、发动机信息等核心字段）
     * @return 影响行数（1：成功，0：失败）
     */
    int insertTransportVehicle(TransportVehicleEntity transportVehicleEntity);

    /**
     * 根据ID查询运输车辆详情
     * @param id 运输车辆ID
     * @return 运输车辆实体（无数据则返回null）
     */
    TransportVehicleEntity selectTransportVehicleById(Long id);

    /**
     * 根据车牌号查询运输车辆（用于车牌号唯一性校验）
     * @param vehicleNumber 车牌号（如：京A12345挂）
     * @return 运输车辆实体（无数据则返回null）
     */
    TransportVehicleEntity selectTransportVehicleByNumber(String vehicleNumber);

    /**
     * 根据发动机编码查询运输车辆（用于发动机编码唯一性校验）
     * @param engineNo 发动机编码（发动机唯一标识）
     * @return 运输车辆实体（无数据则返回null）
     */
    TransportVehicleEntity selectTransportVehicleByEngineNo(String engineNo);

    /**
     * 条件查询运输车辆列表
     * @param queryTransportVehicleBo 查询条件（非空字段作为筛选条件）
     * @return 符合条件的运输车辆列表（无数据则返回空列表）
     */
    List<TransportVehicleEntity> selectTransportVehicleList(QueryTransportVehicleBo queryTransportVehicleBo);

    /**
     * 选择性更新运输车辆信息（仅更新非空字段）
     * @param transportVehicleEntity 运输车辆实体（需包含id，其他字段非空则更新）
     * @return 影响行数（1：成功，0：失败或无变更）
     */
    int updateTransportVehicleSelective(TransportVehicleEntity transportVehicleEntity);

    /**
     * 批量更新政府上传状态
     * @param paramMap 包含两个参数：ids（车辆ID列表）、status（目标状态：INIT/SUCCESS/FAIL）
     * @return 影响行数（成功更新状态的车辆数量）
     */
    int batchUpdateGovUploadStatus(Map<String, Object> paramMap);

    /**
     * 批量更新联网状态
     * @param paramMap 包含两个参数：ids（车辆ID列表）、status（目标状态：ONLINE/OFFLINE）
     * @return 影响行数（成功更新状态的车辆数量）
     */
    int batchUpdateNetworkStatus(Map<String, Object> paramMap);

    /**
     * 根据ID删除运输车辆
     * @param id 运输车辆ID
     * @return 影响行数（1：成功，0：失败）
     */
    int deleteTransportVehicleById(Long id);

    /**
     * 批量删除运输车辆（根据ID列表）
     * @param ids 运输车辆ID列表
     * @return 影响行数（成功删除的车辆数量）
     */
    int batchDeleteTransportVehicles(List<Long> ids);
}
